API (Application Programming Interface) সিকিউরিটি খুবই গুরুত্বপূর্ণ, বিশেষ করে যখন আপনার অ্যাপ্লিকেশন পিএইচপি এবং MySQL ডেটাবেস ব্যবহার করে। একটি API সঠিকভাবে সুরক্ষিত না থাকলে এটি হ্যাকিং, ডেটা চুরি বা অবৈধ অ্যাক্সেসের শিকার হতে পারে। API নিরাপত্তা নিশ্চিত করার জন্য বিভিন্ন টেকনিক রয়েছে, যার মধ্যে Authentication (প্রমাণীকরণ) এবং Authorization (অনুমোদন) সবচেয়ে গুরুত্বপূর্ণ। এখানে PHP এবং MySQL ব্যবহার করে API সিকিউরিটি নিশ্চিত করার জন্য কিছু মূল প্রযুক্তি আলোচনা করা হবে।
১. API Authentication (প্রমাণীকরণ) Techniques
API প্রমাণীকরণ ব্যবহারকারীর পরিচয় নিশ্চিত করার প্রক্রিয়া। এর মাধ্যমে আমরা নিশ্চিত হতে পারি যে, যে কেউ আমাদের API অ্যাক্সেস করছে, সে বৈধ ব্যবহারকারী। প্রমাণীকরণের কয়েকটি জনপ্রিয় পদ্ধতি:
১.১ Basic Authentication
Basic Authentication পদ্ধতিতে, API কল করার সময় ইউজারনেম এবং পাসওয়ার্ড HTTP হেডারে পাঠানো হয়। এটি নিরাপদ নয়, কারণ পাসওয়ার্ডটি সরাসরি পাঠানো হয়, তবে HTTPS এর মাধ্যমে এটি কিছুটা সুরক্ষিত হতে পারে।
// API Header থেকে ইউজারনেম এবং পাসওয়ার্ড পাওয়া
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
header('HTTP/1.0 401 Unauthorized');
echo 'Access Denied';
exit;
}
// MySQL ডেটাবেসে ইউজার প্রমাণীকরণ
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
$conn = new mysqli('localhost', 'username', 'password', 'database');
$sql = "SELECT * FROM users WHERE username = '$user' AND password = '$pass'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo 'প্রমাণীকরণ সফল';
} else {
echo 'অবৈধ ইউজার';
}
সতর্কতা: Basic Authentication শুধুমাত্র HTTPS এর সাথে ব্যবহার করা উচিত, কারণ এটি নিরাপদ নয়।
১.২ Token-Based Authentication (JWT - JSON Web Token)
JWT (JSON Web Token) একটি জনপ্রিয় প্রমাণীকরণ পদ্ধতি যেখানে প্রমাণীকরণ সিস্টেম একটি টোকেন তৈরি করে এবং এটি প্রতিটি রিকোয়েস্টে পাঠানো হয়। এতে, ব্যবহারকারী একটি সেশনে লগ ইন করার পর প্রতিটি রিকোয়েস্টে টোকেন ব্যবহার করে অ্যাক্সেস পায়।
JWT এর কাজের প্রক্রিয়া:
- ব্যবহারকারী প্রথমে লগ ইন করে এবং সার্ভার একটি JWT টোকেন প্রদান করে।
- ব্যবহারকারী প্রতিটি API রিকোয়েস্টে টোকেনটি প্রেরণ করে, এবং সার্ভার সেই টোকেনটি যাচাই করে।
// JWT লাইব্রেরি অন্তর্ভুক্ত করা
use \Firebase\JWT\JWT;
// Secret key
$secret_key = "YOUR_SECRET_KEY";
// Token জেনারেট করা
$issued_at = time();
$expiration_time = $issued_at + 3600; // 1 ঘণ্টা পর মেয়াদ শেষ হবে
$payload = array(
"iat" => $issued_at,
"exp" => $expiration_time,
"user_id" => $user_id
);
$jwt = JWT::encode($payload, $secret_key);
echo json_encode(array("token" => $jwt));
// Token যাচাই করা
if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
$jwt = $_SERVER['HTTP_AUTHORIZATION'];
try {
$decoded = JWT::decode($jwt, $secret_key, array('HS256'));
echo "Token validated!";
} catch (Exception $e) {
echo "Invalid Token: " . $e->getMessage();
}
} else {
echo "Token not provided";
}
JWT টোকেনের মাধ্যমে API নিরাপত্তা নিশ্চিত করা হয়, এবং ব্যবহারকারীর পাসওয়ার্ড সরাসরি সঞ্চিত বা প্রেরিত হয় না। এটি সাধারণত মোবাইল অ্যাপ্লিকেশন, ওয়েব অ্যাপ্লিকেশন এবং ক্লাউড সার্ভিসে ব্যবহৃত হয়।
২. API Authorization (অনুমোদন) Techniques
Authorization হল প্রক্রিয়া যা নির্ধারণ করে যে, প্রমাণীকৃত ব্যবহারকারী কোন রিসোর্স বা ফিচারে অ্যাক্সেস পাবে। API-তে Authorization বিভিন্ন পদ্ধতিতে করা যায়।
২.১ Role-Based Access Control (RBAC)
RBAC হল একটি পদ্ধতি যেখানে ব্যবহারকারীদের নির্দিষ্ট ভূমিকা (role) দেওয়া হয়, এবং সেই ভূমিকার ভিত্তিতে তাদের অনুমতি প্রদান করা হয়। যেমন, একজন admin এর কাছে সকল রিসোর্স অ্যাক্সেস করার অনুমতি থাকতে পারে, কিন্তু একজন user শুধুমাত্র নির্দিষ্ট রিসোর্স দেখতে পারে।
// ইউজারের রোল চেক করা
$sql = "SELECT role FROM users WHERE username = '$username' AND password = '$password'";
$result = $conn->query($sql);
$user = $result->fetch_assoc();
if ($user['role'] == 'admin') {
echo 'Admin access granted';
} elseif ($user['role'] == 'user') {
echo 'User access granted';
} else {
echo 'Access Denied';
}
২.২ Permission-Based Access Control
এই পদ্ধতিতে, প্রতিটি API রিকোয়েস্টের জন্য নির্দিষ্ট অনুমতি চেক করা হয়। উদাহরণস্বরূপ, একজন ব্যবহারকারী যদি update বা delete করতে চায়, তবে তাদের সেই অনুমতি থাকতে হবে।
// ব্যবহারকারীর অনুমতি চেক করা
$sql = "SELECT permissions FROM users WHERE username = '$username' AND password = '$password'";
$result = $conn->query($sql);
$user = $result->fetch_assoc();
if (in_array('edit_post', explode(',', $user['permissions']))) {
echo "You can edit posts.";
} else {
echo "Permission denied.";
}
এখানে, ইউজারের permissions ফিল্ডটি একটি কমা দ্বারা পৃথক করা স্ট্রিং হিসেবে রাখা হয় এবং তারপর সেই স্ট্রিং থেকে নির্দিষ্ট অনুমতি চেক করা হয়।
৩. API Rate Limiting (রেট লিমিটিং)
API রেট লিমিটিং হল একটি সিকিউরিটি পদ্ধতি যা ব্যবহারকারীদের নির্দিষ্ট সংখ্যক রিকোয়েস্ট পাঠানোর সীমা নির্ধারণ করে। এর মাধ্যমে API-তে অতিরিক্ত লোড এবং DDoS (Distributed Denial of Service) আক্রমণ থেকে রক্ষা পাওয়া যায়।
// রেট লিমিট চেক করা
$ip_address = $_SERVER['REMOTE_ADDR'];
$timestamp = time();
// ডেটাবেস থেকে আগের রিকোয়েস্ট টাইম চেক করা
$sql = "SELECT last_request_time FROM api_requests WHERE ip_address = '$ip_address'";
$result = $conn->query($sql);
$user = $result->fetch_assoc();
if ($user['last_request_time'] < $timestamp - 60) { // 60 সেকেন্ডের মধ্যে একাধিক রিকোয়েস্ট রোধ করা
echo "Request allowed.";
// ডেটাবেসে নতুন রিকোয়েস্ট টাইম আপডেট করা
$conn->query("UPDATE api_requests SET last_request_time = $timestamp WHERE ip_address = '$ip_address'");
} else {
echo "Rate limit exceeded.";
}
এটি নিশ্চিত করে যে, একই ব্যবহারকারী একাধিক রিকোয়েস্ট এক সাথে পাঠাতে পারবে না।
৪. API Data Encryption
ডেটা এনক্রিপশন API নিরাপত্তার আরেকটি গুরুত্বপূর্ণ দিক। এটি নিশ্চিত করে যে, আপনার API-তে প্রেরিত ডেটা হ্যাকারদের দ্বারা পড়া বা পরিবর্তন করা সম্ভব নয়। HTTPS প্রোটোকল ব্যবহার করে সমস্ত API রিকোয়েস্ট এনক্রিপ্ট করা উচিত।
HTTPS ব্যবহার:
- API রিকোয়েস্ট ও রেসপন্স এনক্রিপ্ট করতে সবসময় HTTPS ব্যবহার করুন। এটি Man-in-the-Middle (MITM) আক্রমণ থেকে রক্ষা করবে।
সারাংশ
API নিরাপত্তা নিশ্চিত করতে বিভিন্ন প্রমাণীকরণ এবং অনুমোদন পদ্ধতি ব্যবহার করা হয়। JWT একটি জনপ্রিয় এবং নিরাপদ পদ্ধতি API প্রমাণীকরণের জন্য, যেখানে Role-Based Access Control (RBAC) এবং Permission-Based Access Control বিভিন্ন রকম অ্যাক্সেস নিয়ন্ত্রণের পদ্ধতি। এর সাথে, Rate Limiting ও Data Encryption ব্যবহারের মাধ্যমে API-এর নিরাপত্তা আরও বৃদ্ধি করা সম্ভব। HTTPS ব্যবহার নিশ্চিত করলে আপনার API সুরক্ষিত থাকবে, এবং সঠিক পদ্ধতি অনুসরণ করলে হ্যাকিং বা অবৈধ অ্যাক্সেস থেকে API রক্ষা পাবে।
Read more